/*
	Ajax(options)
		options:参数对象
			@type:请求类型
			@datatype:数据类型
			@url:请求路径
			@data:要发送的请求数据
			@timeout:请求超时
			@success:请求成功的回调函数
			@error:请求失败的回调函数
*/
function Ajax(options) {
	//1、如果options没有指定的options对象，那么我们就给它赋值一个空对象{}
	options = options || {};
	//2、如果没有指定请求方式，那么我们就赋值指定方式,反之默认为GET,并转成大写|小写
	options.type = (options.type || 'GET').toUpperCase();
	//3、如果有指定响应数据类型，那么就赋值指定值，反之默认为json格式的数据
	options.datatype = options.datatype || 'json'
	//4-2、设置options.data
	var params = fromParams(options.data)
	//4、写ajax的过程
	if (window.XMLHttpRequest) {
		var xhr = new XMLHttpRequest()
	} else {
		var xhr = new ActiveXObject('Microsofr.XMLHTTP')
	}
	//4-1、建立链接并发送请求
	/*
	 考虑两种请求方式
		get:options.url + '?' + params
			@params:要发送给服务器的请求数据
		post:options.url
	 */
	if (options.type == "GET") { //GET请求
		xhr.open('GET', options.url + '?' + params, true)
		xhr.send(null)
	} else if (options.type == 'POST') {
		xhr.open('POST', options.url, true)
		//4-3、给post请求添加请求头
		xhr.setRequestHeader("Content-type", "application/x-www-from-urlencoded");
		xhr.send(params);
	}
	//4-2-1、格式化请求参数(针对post)
	function fromParams(data) {
		var arr = [] //用来存放处理后的参数 [name = aa ,age = 18....]
		//4-2-2、将data转码后插入到数组中
		for (var item in data) {
			arr.push(encodeURIComponent(item) + '=' + encodeURIComponent(data[item]))
		}
		//4-2-3、将发送的数据加点难度(提高安全性【没什么用】)
		arr.push(('v=' + Math.random()).replace('.', ''));
		return arr.join('&'); //xxx.html?xx=xx&xxx=xxx....
	}
	//5、设置请求超时时(时间戳)
	options.timeout = options.timeout || 5000;
	setTimeout(function(){
		if(xhr.readyState != 4){
			xhr.abort()//关闭请求
		}
	},options.timeout)
	//6、请求响应事件
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
				options.success && options.success(xhr.responseText,xhr.responseXML)
			}else{
				options.error && options.error(xhr.status)
			}
		}
	}
}